#pragma once
#include <vector>

namespace zsw
{
	template<size_t N>
	class bitset
	{
	public:
		bitset()
		{
			_map.resize(N / 32 + 1, 0);
		}

		void set(const int& x)
		{
			int i = x / 32;
			int j = x % 32;
			_map[i] |= (1 << j);
		}

		void reset(const int& x)
		{
			int i = x / 32;
			int j = x % 32;
			_map[i] &= ~(1 << j);
		}

		bool test(const int& x)
		{
			int i = x / 32;
			int j = x % 32;
			if ((_map[i] & (1 << j)) != 0)
			{
				//cout << x <<  "->" << "true" << endl;
				return true;
			}
			else
			{
				//cout << x <<  "->" << "false" << endl;
				return false;
			}
		}
	private:
		vector<int> _map;
	};
}